from estadoFase import EstadoFase, db_session
from sqlalchemy import exc
from flask import flash
from historialAtributo import HistorialAtributo, historialAtributo
session = db_session()

class HistorialAtributoManager(object):
    """Clase encargada del manejo del historial de atributos de un item"""
    def __init__(self):
        pass
    def __repr__(self):
        return '<HistorialAtributo Manager>'
    
    def guardarHistorialAtributo(self, historialAtributo):
        """
        Metodo encargado de almacenar un historial de atributo item en la base de datos
        @param historialAtributo: Objeto atributo item que se desea guardar.
        """
        session.add(historialAtributo)
        try:
            session.commit()
        except exc.IntegrityError as ex:
            session.rollback()
            return flash("El historial de atributo ya existe", "error")
        else:
            return flash("Historial de atributo item registrado exitosamente")
#        session.close()
        
    def eliminarHistorialAtributo(self, idatributoitem):
        """
        Metodo encargado de eliminar el historial de atributos de un item de la base de datos
        @param idatributoitem: id del historial de atributos de un item que se desea eliminar.
        """
        atributoItem = session.query(HistorialAtributo).filter(HistorialAtributo.idatributoitem == idatributoitem).first()
        session.delete(atributoItem)
        session.commit()
        
    def getHistorialAtributos(self, idhistorialitem):
        """
        Metodo encargado de retornar el historial de atributos de un item dado su idhistorialitem
        @param idhistorialitem: id del historial de atributos de un item que se desea obtener.
        """
        historialAtributos = session.query(HistorialAtributo).filter(HistorialAtributo.idhistorialitem == idhistorialitem)
        return historialAtributos
    
    def getHistorialAtributo(self):
        """Metodo encargado de retornar todos los atributos item"""
        atributoItem = session.query(HistorialAtributo)
        return atributoItem
    